
import java.lang.reflect.Method;

class Reflect {

    public static void main(String[] args) {
        Class<?> clazz = MyClass.class;
        Method method = clazz.getMethod("testMethod");

        // 检查方法内是否有特定注解 
        if (method.isAnnotationPresent(MyClass.class)) {
            MyClass annotation = method.getAnnotation(MyClass.class);
            System.out.println("注解值" + annotation.value());
        }

        // 通过反射调用
        MyClass obj = new MyClass();
        method.invoke(obj);

    }
}

// 1. Class 类
// 获取类的元信息：
//
// java
// Class<?> userServiceClass = Class.forName("com.example.UserService");
// Method[] methods = userServiceClass.getMethods(); // 获取所有public方法
// Field[] fields = userServiceClass.getDeclaredFields(); // 获取所有字段（包括private）
// 2. Constructor 类
// 动态创建对象：
//
// java
// Constructor<?> constructor = userServiceClass.getConstructor();
// Object userService = constructor.newInstance(); // 等价于 new UserService()
// 3. Method 类
// 动态调用方法：
//
// java
// Method getUserMethod = userServiceClass.getMethod("getUser", Long.class);
// User user = (User) getUserMethod.invoke(userService, 1L); // 等价于 userService.getUser(1L)
//
// 4. Field 类
// 动态访问 / 修改字段：
//
// java
// Field repositoryField = userServiceClass.getDeclaredField("repository");
// repositoryField.setAccessible(true); // 允许访问private字段
// repositoryField.set(userService, new UserRepository()); // 等价于 userService.repository = ...
// 5. Annotation 类
// 获取注解信息：
//
// java
// Method method = userServiceClass.getMethod("getUser");
// if (method.isAnnotationPresent(MyAnnotation.class)) {
// MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
// System.out.println("注解值" + annotation.value());
// }
